home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-02 | 14.2 KB | 508 lines | [TEXT/MPS ] |
- # SCcreateMake - create a program makefile
- #
- # Usage:
- # SCcreateMake ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] |
- # -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ]
- # [ -c creator ] [-sym on] | -SIOW [ -c creator] [ -sym on ])
- # [ -mc68020 | -mc68881 | -elems881]
- # -PO -SL program file…
- #
- # Script CreateMake creates a simple MakeFile for building the specified
- # program. The program parameter is the name of the program. Makefile
- # <program>.make is created. The default program type is Application.
- # The program may be written in any combination of Assembly Language, C, C++
- # Pascal, and/or Rez. The list of files may include both source in
- # these languages and library object files that don't appear below.
- #
- # SCcreateMake links the program with the following set of MPW Libraries:
- #
- # Inside Macintosh Interfaces
- # {Libraries}Interface.o
- #
- # Runtime support - one of the following:
- # {Libraries}Stubs.o # building a tool
- # {Libraries}Runtime.o # no C object files
- #
- # C Libraries - if any source is in C
- # {SCLibraries}SClibc.o
- # {CLibraries}CSANELib.o
- # {CLibraries}Math.o
- #
- # C++ Libraries - if any source is in C++
- # {SClibraries}SClibc.o
- # {SClibraries}SClibcpp.o
- # {SCLibraries}SCStreamsIO.o
- # {CLibraries}CSANELib.o
- # {CLibraries}Math.o
- #
- # Pascal Libraries - if any source is in Pascal
- # {PLibraries}PasLib.o
- # {PLibraries}SANELib.o
- #
- # For tools:
- # {Libraries}ToolLibs.o
- #
- # For desk accessories:
- # {Libraries}DRVRRuntime.o
- #
- # For programs using pascal objects:
- # {Libraries}objlib.o
- #
- #
- # Copyright Symantec, Inc. 1987 - 1992
- # All rights reserved.
-
- Set Exit 0
- Set CaseSensitive 0
- Set type Application
- Set creator '????'
- Set runtime '{Libraries}Runtime.o'
- Set interface '{Libraries}Interface.o'
- Set cFloatLib '{CLibraries}CSANELib.o {CLibraries}Math.o'
- Set cplusFloatLib '{CLibraries}CSANELib.o {CLibraries}Math.o'
- Set pFloatLib '{PLibraries}SANELib.o'
- Unset sources clibs plibs toollibs DRVRRuntime resource objects program suffix typ
- Unset cSeen tSeen rtSeen mSeen multipleType typeSpec CPls CLang symarg symseen compileOptions
- Unset hardwardFloat cCompileOptions cppCompileOptions pCompileOptions multipleHWOptions
- Unset cppseen objlibs streamslib
-
- # Collect the script parameters.
- Loop
- Break if {#} == 0
- If "{1}" =~ /-application/
- Set type Application
- Unset toollibs
- If {typeSpec} == 0
- Set typeSpec 1
- Else
- Set multipleType 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-tool/
- Set type Tool
- Set toollibs '{Libraries}ToolLibs.o'
- If {typeSpec} == 0
- Set typeSpec 1
- Else
- Set multipleType 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-da/
- Set type DA
- Unset toollibs
- If {typeSpec} == 0
- Set typeSpec 1
- Else
- Set multipleType 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-cr/
- Set type CR
- Unset toollibs
- If {typeSpec} == 0
- Set typeSpec 1
- Else
- Set multipleType 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-siow/
- Set type SIOW
- If {typeSpec} == 0
- Set typeSpec 1
- Else
- Set multipleType 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-mc68020/
- If "{cCompileOptions}" == ""
- set cCompileOptions "-mc68020 "
- set cppCompileOptions "-mc68020 "
- set pCompileOptions "-mc68020 "
- Else
- set multipleHWOptions 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-mc68881/
- If "{cCompileOptions}" == ""
- set cCompileOptions "-mc68020 -mc68881 "
- set cppCompileOptions "-mc68020 -mc68881 "
- set pCompileOptions "-mc68020 -mc68881 "
- set hardwareFloat 1
- Else
- set multipleHWOptions 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-elems881/
- If "{cCompileOptions}" == ""
- set cCompileOptions "-mc68020 -mc68881 -elems881 "
- set cppCompileOptions "-mc68020 -mc68881 -elems881 "
- set pCompileOptions "-mc68020 -mc68881 -d elems881=true "
- set hardwareFloat 1
- Else
- set multipleHWOptions 1
- End
- shift 1
- continue
- Else If "{1}" =~ /-c/
- set creator "{2}"
- set cseen 1
- shift 2
- continue
- Else If "{1}" =~ /-t/
- set typ "{2}"
- set tseen 1
- shift 2
- continue
- Else If "{1}" =~ /-rt/
- set rtype "{2}"
- set rtseen 1
- shift 2
- continue
- Else If "{1}" =~ /-cpp/
- set cppseen 1
- shift 1
- continue
- Else If "{1}" =~ /-PO/
- set objlibs 1
- shift 1
- continue
- Else If "{1}" =~ /-SL/
- set streamslib 1
- shift 1
- continue
- Else If "{1}" =~ /-m/
- set mentry "{2}"
- set mseen 1
- shift 2
- continue
- Else If "{1}" =~ /-sym/
- set symarg {2}
- set symseen 1
- shift 2
- continue
- Else If ("{1}" =~ /≈.[acpr]/ || "{1}" =~ /≈.cp/ || "{1}" =~ /≈.cpp/)
- Set sources "{sources}'{1}' "
- shift 1
- continue
- Else If "{1}" =~ /≈.[o]/
- Set objects "{objects}'{1}' "
- shift 1
- continue
- Else If "{program}" == "" && "{1}" !~ /-≈/
- Set program "{1}"
- shift 1
- continue
- Else If "{1}" =~ /-≈/
- Echo "### {0} - ∂"{1}∂" is not an option." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- Else
- Echo "### {0} - Files must end in .a, .c, .p, .cp, .cpp, .r, or .o." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- End
- If {type} == DA && {symseen}
- Echo "### {0} - Option -sym not supported for desk accessory." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- If {type} == CR && ("{rtype}" == "" || "{mentry}" == "")
- Echo "### {0} - Options -rt and -m are required for code resource." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- If "{program}" == ""
- Echo "### {0} - A program name is required." > Dev:StdErr
- Echo "### {0} - Don't include the .a, .c, .cp, or .p suffix." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- If "{sources}" == ""
- Echo "### {0} - A source file is required." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- If {multipleType} != 0
- Echo "### {0} - Only one of Application, DA, Tool, or CR may be specified." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
- If {multipleHWOptions} != 0
- Echo "### {0} - Only one of -mc68020, -mc68881, or -elems881 may be specified." > Dev:StdErr
- Echo "# Usage - {0} ([ -Application] [ -c creator ] [-sym on] | -Tool [-sym on] | ∂n ∂
- -DA | -CR -m mainEntryPoint -rt resourceType [ -t fileType ] ∂n ∂
- [ -c creator ] [-sym on] | -SIOW [ -sym on ]) ∂n ∂
- [ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
- Exit 1
- End
-
- If {cSeen} != 0 && ({type} == Tool || {type} == DA || {type} == SIOW)
- Echo "### {0} - Warning: Option -c ignored for {type}." > Dev:StdErr
- End
- If {tseen} != 0 && {type} != CR
- Echo "### {0} - Warning: Option -t ignored for {type}." > Dev:StdErr
- End
- If {rtseen} != 0 && {type} != CR
- Echo "### {0} - Warning: Option -rt ignored for {type}." > Dev:StdErr
- End
- If {mseen} != 0 && {type} != CR
- Echo "### {0} - Warning: Option -m ignored for {type}." > Dev:StdErr
- End
- If {type} == Tool
- Set options "-d -c 'MPS ' -t 'MPST'"
- Else If {type} == Application
- Set options " -t 'APPL' -c '{creator}'"
- Else If {type} == SIOW
- Set options "-d -c '????' -t 'APPL'"
- End
-
- # Create the heading at the top of the makefile.
-
- Begin
- Echo -n '# File: '; Quote "{program}".make
- Echo -n '# Target: '; Quote "{program}"
- If "{sources}" =~ /≈«1,80»/
- Echo -n '# Sources: '; Quote {sources}
- Else
- Set heading '# Sources: '
- For i In {sources}
- Echo -n "{heading}"
- Quote "{i}"
- Set heading '# '
- End
- End
- Echo -n '# Created: '; Date
- Echo
- Echo
-
- # Create list of implicit objects
-
- For file in {sources}
- If "{file}" =~ /≈.[acp]/ || "{file}" =~ /≈.cp/ || "{file}" =~ /≈.cpp/
- Set objects "{objects} '{file}.o' "
- End
- End
-
- # generate OBJECTS definitions
-
- quote -n OBJECTS =
- If "{objects}" =~ /?«1,80»/
- Echo -n " "; Quote {objects}
- Else
- For i In {objects}
- Echo ' ∂'
- Echo -n ∂t∂t; Quote -n "{i}"
- End
- Echo
- End
- Echo
-
- # Set up library definitions and link options
-
- If {symseen} == 1
- Set compileOptions "-sym {symarg}"
- End
-
- If {hardwareFloat} == 1
- Set cFloatLib '{CLibraries}Clib881.o {CLibraries}CSANELib881.o {CLibraries}Math881.o'
- Set cplusFloatLib '{CLibraries}Clib881.o {CLibraries}CSANELib881.o {CLibraries}Math881.o ∂
- {CLibraries}Complex881.o' #{CLibraries}CplusLib881.o
- Set pFloatLib '{PLibraries}SANELib881.o'
- End
- Echo
-
- For file in {sources}
- If "{file}" =~ /≈.c/
- If {cppseen} == 1
- Set CPls 1
- Else
- Set CLang 1
- End
- Else If "{file}" =~ /≈.cp/
- Set CPls 1
- Else If "{file}" =~ /≈.cpp/
- Set CPls 1
- Else If "{file}" =~ /≈.p/
- Set plibs "{pFloatLib} ∂{PLibraries∂}PasLib.o"
- End
- End
-
- If {CPls} == 1
- If {hardwareFloat} == 1
- Set clibs "∂{SCLibraries∂}SCLibc881.o {cplusFloatLib}"
- Set clibs "{clibs} ∂{SCLibraries∂}SCLibcpp881.o"
- If {streamslib}
- Set clibs "{clibs} ∂{SCLibraries∂}SCstreamsIO881.o"
- End
- Else
- Set clibs "∂{SCLibraries∂}SCLibc.o {cplusFloatLib}"
- Set clibs "{clibs} ∂{SCLibraries∂}SCLibcpp.o"
- If {streamslib}
- Set clibs "{clibs} ∂{SCLibraries∂}SCstreamsIO.o"
- End
- End
- If {objlibs} == 1
- Set clibs "{clibs} ∂{Libraries∂}ObjLib.o"
- End
- Else If {CLang} == 1
- If {hardwareFloat} == 1
- Set clibs " ∂{SCLibraries∂}SCLibc881.o {cFloatLib}"
- Else
- Set clibs " ∂{SCLibraries∂}SCLibc.o {cFloatLib}"
- End
- End
-
- If {type} == Tool
- set runtime "∂{Libraries∂}Stubs.o {runtime}"
- End
-
- If {type} == SIOW
- set runtime "∂{Libraries∂}SIOW.o {runtime}"
- End
-
- For file in {sources}
- If "{file}" =~ /≈.r/
- Set resource "{file}"
- End
- End
-
- # Generate rez call
-
- For file in {sources}
- If "{file}" =~ /≈.r/
- If {type} == DA
- Quote "{program}" ƒ "{program}".make "{program}".DRVW "{file}"
- Echo -n ∂t; Quote Rez -rd -c DMOV -t DFIL -d NOASM_BUILD "{file}" -o "{program}"
- Else
- Quote "{program}" ƒƒ "{program}".make "{file}"
- Echo -n ∂t; Quote Rez "{file}" -append -o "{program}"
- If {type} == CR
- Echo -n ∂t; Quote SetFile -a B "{program}"
- Echo -n ∂t; Quote Duplicate -y "{program}" "{SystemFolder}"
- End
- End
- End
- End
- Echo
-
- If {type} == DA
- If "{resource}" == ""
- Set options "-t '????' -c '????' -rt DRVW=12 -sg '{program}'"
- Else
- Set options "-t '????' -c '????' -rt DRVW=0 -sg '{program}'"
- End
- Set DRVRruntime '{Libraries}DRVRRuntime.o'
- Quote -n "{program}".DRVW ƒ "{program}".make
- Echo ∂ ∂{OBJECTS∂}
- Set suffix '.DRVW'
- Else If {type} == CR
- Quote -n "{program}" ƒƒ "{program}".make
- Echo ∂ ∂{OBJECTS∂}
- If {typ} == 0
- set typ '????'
- End
- Set options "-t '{typ}' -c '{creator}' -rt '{rtype}' -m '{mentry}' ∂
- -sg '{program}'"
- Else
- Quote -n "{program}" ƒƒ "{program}".make
- Echo ∂ ∂{OBJECTS∂}
- End
-
- # Generate Link rule.
-
- If {symseen} == 1
- Set options "{options} -sym {symarg}"
- End
- Echo -n ∂t; Quote -n Link {ZLinkOpts} {options}; Echo ' ∂'
- If {type} == DA
- Echo -n ∂t∂t
- Echo -n {DRVRRuntime}; Echo ' ∂'
- End
- Echo -n ∂t∂t
- If {CPls} == 1
- Echo -n ∂"∂{SCLibraries∂}∂"SCMainCpp.a.o ; Echo ' ∂'
- Else
- Echo -n ∂"∂{SCLibraries∂}∂"SCMainC.a.o ; Echo ' ∂'
- End
- Echo -n ∂t∂t
- Echo -n ∂{OBJECTS∂} ; Echo ' ∂'
- For i In {clibs} {runtime} {interface} {plibs} {toollibs}
- If "{i}" =~ /(≈)®1(∂{≈∂})®2(≈)®3/ # contains {}s ?
- Echo -n ∂t∂t; Echo "{®1}∂"{®2}∂"{®3}" ∂∂
- Else
- Echo -n ∂t∂t; Quote -n "{i}"; Echo ' ∂'
- End
- End
- Echo -n ∂t∂t; Quote -o "{program}{suffix}"
-
- # Generate Asm, C, C++, Pascal, and Rez rules.
- If {cppseen} == 1
- Set compileOptions "{compileOptions}"
- End
-
- Set cCompileOptions {cCompileOptions} "{SCOpts} "
- Set cppCompileOptions {cppCompileOptions} "{SCppOpts} "
-
- For file in {sources}
- If "{file}" =~ /≈.a/
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t Asm "{compileOptions} "; Quote "{file}"
- Else If "{file}" =~ /≈.c/ && {cppseen} == 1
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t SCpp -r "{compileOptions} {cCompileOptions}"; Quote "{file}"
- Else If "{file}" =~ /≈.c/
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t SC -r "{compileOptions} {cCompileOptions}"; Quote "{file}"
- Else If "{file}" =~ /≈.cp/
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t SCpp "{compileOptions} {cppCompileOptions}"; Quote "{file}"
- Else If "{file}" =~ /≈.cpp/
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t SCpp "{compileOptions} {cppCompileOptions}"; Quote "{file}"
- Else If "{file}" =~ /≈.p/
- Quote "{file}".o ƒ "{program}".make "{file}"
- Echo -n ∂t Pascal "{compileOptions} {pCompileOptions}"; Quote "{file}"
- End
- End
- If {type} == SIOW
- Quote -n "{program}"; Echo ' 'ƒƒ ∂"∂{RIncludes∂}∂"SIOW.r
- Echo -n ∂t; Echo Rez -a ∂"∂{RIncludes∂}∂"SIOW.r -o "{program}"
- End
-
- End > "{program}".make
- Echo "{program}"
-
-
-
-
-
-